package com.gcb.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.gcb.domain.bo.ShipBIBO;
import com.gcb.domain.dto.ShipAppQueryPageDTO;
import com.gcb.domain.dto.ShipQueryDTO;
import com.gcb.domain.dto.ShipSaveDTO;
import com.gcb.domain.entity.Ship;
import com.gcb.domain.entity.ShipTrajectory;
import com.gcb.domain.vo.ShipTrajectoryVO;
import com.gcb.domain.vo.ShipVO;

import java.util.List;

public interface IShipService extends IService<Ship> {

    /**
     * 获取所有船舶列表
     * @return
     */
    List<Ship> getAllList();

    /**
     * 分页查询船舶列表
     * @param dto
     * @return
     */
    List<ShipVO> pageList(ShipQueryDTO dto);

    /**
     * 新增船舶
     * @param dto
     */
    void save(ShipSaveDTO dto, Long currentUserId);

    /**
     * 修改船舶
     * @param dto
     */
    void update(ShipSaveDTO dto, Long currentUserId);

    /**
     * 批量修改公司
     * @param idList
     * @param companyId
     */
    void updateBatchCompany(Long[] idList, Long companyId);

    /**
     * 获取详情
     * @param id
     * @return
     */
    ShipVO detail(String id);

    /**
     * APP分页船讯列表
     * @param dto
     * @return
     */
    List<ShipVO> appList(ShipAppQueryPageDTO dto);

    /**
     * APP船讯详情
     * @param mmsiCode
     * @return
     */
    ShipVO appDetailByMmsiCode(String mmsiCode);

    /**
     * 根据mmsiCode获取APP详情
     *
     * @param mmsiCode
     * @return
     */
    ShipVO appGetByMmsiCode(String mmsiCode);

    /**
     * 根据mmsiCode获取信息
     * @param mmsiCode
     * @return
     */
    Ship getByMmsiCode(String mmsiCode);

    List<ShipTrajectoryVO> getAppTrajectoryList(String mmsiCode, String startTime, String endTime);

    List<ShipVO> getUserShipList(String shipName, Integer shipType, String companyId);

    void saveBatchTrajectory(List<ShipTrajectory> allList);

    /**
     * 船舶大屏数据
     * @param city 可根据城市选择查看数据
     * @return 大屏数据
     */
    List<ShipBIBO> biList(String city);

    /**
     * 根据企业id找船
     * @param companyId 企业id
     * @return 船舶列表
     */
    List<ShipVO> getShipListByCompanyId(Long companyId);

}
